关于到期yield()
日,Arduino文档在https://www.arduino.cc/en/Reference/Scheduler上解释.显然它是Scheduler库的一部分:
#include
但是,我可以调用yield()
我的Nano或ESP8266而不包括Scheduler lib - 但仅限于我的主程序,而不是包含文件.此外,包含不适用于我的非会费.
我错过了yield()
什么秘密,或者yield()
除了Due之外在Arduino平台上做了什么?
但是,我可以在Nano或ESP8266上调用yield()而不包括Scheduler lib
该yield()
功能也在ESP8266库中实现:
生产
这是ESP8266与更经典的Arduino微控制器之间最重要的差异之一.ESP8266在后台运行许多实用功能 - 保持WiFi连接,管理TCP/IP堆栈以及执行其他任务.阻止这些功能运行可能导致ESP8266崩溃并自行重置.为了避免这些神秘的重置,请避免在草图中使用长的阻塞循环.
ESP8266 Arduino库的惊人创建者还实现了yield()函数,该函数调用后台函数以允许它们执行其操作.
这就是为什么你可以yield()
在主程序中调用包含ESP8266标头的原因.
参见ESP8266事情连接指南.
更新:
yield()
在Arduino.h中定义为:
void yield(void);
yield()
也声明hooks.h
如下:
/** * Empty yield() hook. * * This function is intended to be used by library writers to build * libraries or sketches that supports cooperative threads. * * Its defined as a weak symbol and it can be redefined to implement a * real cooperative scheduler. */ static void __empty() { // Empty } void yield(void) __attribute__ ((weak, alias("__empty")));
所以,在它上面Nano
,它可能什么都不做(除非你有其他库#included
).